#!/usr/bin/env node

/**
 * 定时任务模块测试脚本
 * 用于验证定时任务配置是否正确
 */

const cron = require('cron');

console.log('🚀 定时任务模块测试脚本启动...\n');

// 测试Cron表达式
const testCronExpressions = () => {
  console.log('📅 测试Cron表达式:');
  
  // 用户日志清理时间: 每天凌晨2点
  const userLogCron = '0 2 * * *';
  console.log(`用户日志清理: ${userLogCron} (每天凌晨2点)`);
  
  // 安全日志清理时间: 每天凌晨2点30分
  const securityLogCron = '30 2 * * *';
  console.log(`安全日志清理: ${securityLogCron} (每天凌晨2点30分)\n`);
  
  return { userLogCron, securityLogCron };
};

// 模拟定时任务执行
const simulateScheduledTasks = () => {
  console.log('⏰ 模拟定时任务执行:');
  
  // 模拟用户日志清理任务
  const userLogJob = new cron.CronJob('0 2 * * *', () => {
    console.log('✅ 用户日志清理任务执行 - 每天凌晨2点');
  }, null, false, 'Asia/Shanghai');
  
  // 模拟安全日志清理任务
  const securityLogJob = new cron.CronJob('30 2 * * *', () => {
    console.log('✅ 安全日志清理任务执行 - 每天凌晨2点30分');
  }, null, false, 'Asia/Shanghai');
  
  console.log('用户日志清理任务已创建');
  console.log('安全日志清理任务已创建\n');
  
  return { userLogJob, securityLogJob };
};

// 显示配置信息
const showConfiguration = () => {
  console.log('⚙️ 定时任务配置信息:');
  console.log('时区: Asia/Shanghai');
  console.log('用户日志保留天数: 90天');
  console.log('安全日志保留天数: 90天');
  console.log('通知功能: 已启用');
  console.log('Webhook: https://webhook.example.com/log-cleanup\n');
};

// 显示API接口信息
const showApiEndpoints = () => {
  console.log('🌐 API接口信息:');
  console.log('GET  /scheduler/status                    - 获取定时任务状态');
  console.log('POST /scheduler/clean-user-logs?days=90   - 手动清理用户日志');
  console.log('POST /scheduler/clean-security-logs?days=90 - 手动清理安全日志\n');
};

// 显示使用说明
const showUsage = () => {
  console.log('📖 使用说明:');
  console.log('1. 定时任务会在应用启动后自动开始执行');
  console.log('2. 用户日志每天凌晨2点自动清理90天前的记录');
  console.log('3. 安全日志每天凌晨2点30分自动清理90天前的记录');
  console.log('4. 管理员可通过API接口手动触发清理操作');
  console.log('5. 所有清理操作使用软删除，数据不会丢失\n');
};

// 主函数
const main = () => {
  try {
    testCronExpressions();
    simulateScheduledTasks();
    showConfiguration();
    showApiEndpoints();
    showUsage();
    
    console.log('🎉 定时任务模块测试完成！');
    console.log('💡 提示: 启动应用后，定时任务将自动开始工作');
    
  } catch (error) {
    console.error('❌ 测试过程中发生错误:', error.message);
    process.exit(1);
  }
};

// 运行测试
main();
